在MySQL中存储UTF8数据

时间:2009-12-21 20:32:51

标签: mysql database utf-8 character-encoding

使用UTF8字符集在mysql中存储数据时,在输入数据时是否有意义转义实体字符,还是以原始形式存储它并在拔出时转换它更好?

例如,假设某人将子弹(•)字符输入文本框。保存该数据时,是否应在输入前将其转换为•?或者将它作为子弹输入是否有意义,然后在拉出时进行转换?

我想我不确定存储非ascii数据的最佳做法。任何想法都将不胜感激。

4 个答案:

答案 0 :(得分:6)

如果您在整个应用程序中使用UTF-8字符集(即MySQL,还有HTML页面的编码,脚本,代码等等),则无需使用将“特殊字符”转换为实体:只需将您的文本数据发送为UTF-8; - )

答案 1 :(得分:3)

按原样存储数据。执行在运行时显示所需的任何转换。

因为如果您将其存储为HTML(带有实体),则会产生几个问题

  • 您将数据锁定为HTML格式,而不仅仅是“文本内容”
  • 确定数据宽度(例如varchar(255)或SQL字符串函数的使用情况,例如substring()reverse()
  • 如果不转换搜索输入,则无法搜索这些字符

答案 2 :(得分:0)

转义的目的是通过不允许某些字符的通道传输数据。由于UTF-8数据库可以很好地处理UTF-8字符,因此您没有理由逃避任何存储空间。实际上,由于转义文本难以操作(例如字符串函数无法正常工作),因此通常建议不要执行不必要的转义。

答案 3 :(得分:0)

考虑数据库可以托管多个应用程序的数据。

在该环境中,数据库中字符串的定义由数据库定义,而不是由应用程序定义。使您的应用程序符合数据标准,并在数据层中明确转换。

例如,如果数据库是较新的模式,并且DBA已定义字符串将以UTF-8存储,则从您的应用程序传递的所有字符串都应为UTF-8。

但是,如果数据库是遗留系统,并且数据的目标是8位字符集,则在应用程序中将转换转换为相应的代码页和/或在遇到不合格的值时失败

与Web交互的大多数较新的数据库模式应标准化为UTF-8或UTF-16。如果要构建数据库,首先要对其进行本地化,然后在确定内部字符串表示后,强制所有写入它的应用程序符合您的标准。