使用UTF8字符集在mysql中存储数据时,在输入数据时是否有意义转义实体字符,还是以原始形式存储它并在拔出时转换它更好?
例如,假设某人将子弹(•)字符输入文本框。保存该数据时,是否应在输入前将其转换为•
?或者将它作为子弹输入是否有意义,然后在拉出时进行转换?
我想我不确定存储非ascii数据的最佳做法。任何想法都将不胜感激。
答案 0 :(得分:6)
如果您在整个应用程序中使用UTF-8字符集(即MySQL,还有HTML页面的编码,脚本,代码等等),则无需使用将“特殊字符”转换为实体:只需将您的文本数据发送为UTF-8; - )
答案 1 :(得分:3)
按原样存储数据。执行在运行时显示所需的任何转换。
因为如果您将其存储为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。如果要构建数据库,首先要对其进行本地化,然后在确定内部字符串表示后,强制所有写入它的应用程序符合您的标准。