【发布时间】:2018-01-23 22:43:19
【问题描述】:
我在 MySql 数据库中设置了我的字符集“utf8 turkish ci”。因为我会在我的项目中存储一些土耳其语字符。我可以正确输入土耳其字符并看到它们。但我的问题是:
例如,我将“用户名”定义为 varhar(20),输入框的最大长度为 20。这意味着用户不能写任何超过 20 个字符的用户名。但是当用户使用土耳其语 unicode 字符(如 ş,i,ü,ğ)时,会出现“Data too long for column 'username'”错误,因为 unicode 字符是 2 个字节长!
我尝试使用 phpmyadmin 更新我的数据库。但是更新长度会带来更多错误。那么我是否必须删除所有表格并用 x2 长度编写它们? (我的意思是如果数据是 20 个字符,我将其定义为 varchar(40) )我有 30 个表,这是一场噩梦。有什么办法吗?
【问题讨论】:
-
是的,字段是 varchar(20) utf8_turkish_ci。我尝试输入 10 个 unicode 字符,没有错误。但是当我尝试输入 11 个 unicode 字符时,会导致“太长”错误。所以我看到 unicode 字符使用 2 个字节。并且必须更改我所有的数据库:(
-
utf8_unicode_ci (utf8mb4_unicode_ci) 是这样的东西。更多阅读:stackoverflow.com/a/766996/2960971dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html
-
你在哪里看到这个“太长”的错误,是什么决定的?这是您实际上从 mysql 中得到的错误,还是 php 出现的错误,因为它正在执行某种初步的字符串计数?
-
我认为this 会帮助你,
VARCHAR和CHAR长度定义只考虑字符长度,而不考虑每个字符的字节数。你在使用 InnoDb 吗?你应该看看restrictions