• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试解析之带你轻松的接触用于元数据的 UTF8

发布: 2009-10-12 09:36 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 9次 | 进入软件测试论坛讨论

领测软件测试网

软件测试解析之带你轻松的接触用于元数据的 UTF8  软件测试工具

关键字:UTF8 元数据是“关于数据的数据”。描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。 


元数据表述必须满足这些需求: 


· 全部元数据必须在同一字符集内。否则,对INFORM一个TION_SCHEMA数据库中的表执行的SHOW命令和SELECT查询不能正常工作,因为这些运算结果中的同一列的不同行将会使用不同的字符集。 


· 元数据必须包括所有语言的所有字符。否则,用户将不能够使用它们自己的语言来命名列和表。 


为了满足这两个需求,MySQL使用Unicode字符集存储元数据,即UTF8。如果你从不使用重音字符,这不会导致任何破坏。但如果你使用重音字符,应该注意的是元数据是用UTF8存储。 


这意味着,USER()、CURRENT_USER()、DATABASE()和VERSION()函数的返回值被 默认设置为UTF8字符集,这与同义函数如SESSION_USER() 和SYSTEM_USER()的结果相同。 


服务器将character_set_system系统变量设置为元数据字符集的名: 


mysql> SHOW VARIABLES LIKE ’character_set_system’;
 


Variable_name       Value 
character_set_system utf8
 

存储元数据使用Unicode并不意味着列头和DESCRIBE函数的结果默认在character_set_system字符集中。当你使用SELECT column1 FROM t语句时,名字为column1的列从服务器返回客户端并使用由SET NAMES语句确定的字符集。更明确地说,使用的字符集是由character_set_results系统变量的值确定的。如果这个系统变量设置为NULL,不执行字符转换,服务器使用最初的字符集(字符集由character_set_system系统变量设置)返回元数据。 


如果你希望服务器不使用UTF8字符集返回元数据结果,那么使用SET NAMES语句强制服务器执行字符集转换或者在客户端执行转换。在客户端执行转换效率较高,但这种选项并不能使用于全部客户端。 


如果你正在一个语句中使用(例如)USER()函数进行比较或赋值,不要担心。MySQL为你执行一些原子转换。 


SELECT * FROM Table1 WHERE USER() = latin1_column;
 


这是可以的,因为在比较之前latin1_column列的内容会自动转换到UTF8。 


INSERT INTO Table1 (latin1_column) SELECT USER(); 

这是可以的,因为赋值之前USER()函数返回的内容自动转换为latin1。至今,自动转换没有全部实施,但是以后的版本中应该工作正常。 


尽管自动转换不属于SQL标准,SQL标准化文档中说每一个字符集是(根据支持的字符)Unicode的“子集”。因此,一个知名的原则是,“适用超集的字符集能够应用于其子集”,我们相信Unicode的 校对规则能够应用于非Unicode字符串的比较。 


注释:在MySQL5.1中,errmsg.txt文件全部使用UTF8。客户端字符集的转换是自动进行的,如同元数据。  
 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: 解析 软件测试 数据


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网