我在MySql数据库中设置了我的Charset“utf8 turkish ci”。因为我会在我的项目中存储一些土耳其字符。我可以正确地进入土耳其语中看到它们。但我的问题是:
例如,我将“username”定义为varhar(20),输入框的maxlenght为20.这意味着用户不能写任何超过20个字符的用户名。但是,当用户使用土耳其语unicode字符(如ş,i,ü,ğ)时,会出现“数据太长,列'用户名'”错误,因为unicode字符长2个字节!
我尝试用phpmyadmin更新我的数据库。但是更新长度会带来更多错误。所以我必须删除所有表并用x2 lenght写它们吗? (我的意思是,如果数据将是20个字符,我将其定义为varchar(40))我有30个表,这是一场噩梦。我有什么办法吗?
答案 0 :(得分:1)
MySQL默认使用3个字节来存储指定为UTF8的VARCHAR的任何字符(或者UTF8MB4的4个字节)。
VARCHAR(10)实际上 意味着10个字符,30个字节。它并不意味着10个字节。
答案 1 :(得分:1)
我怀疑您的<form>
需要包含字符集:<form accept-charset="UTF-8">