这里的问题是JavaScript端的国际化,而不是数据库表的排序规则.如果之前没有这样的问题,很可能以前没有用户输入国际字符,或者HTML页面的字符集是ISO-8859-1/cp1252(这将限制客户端的POST数据形式.)新的用户或更改的HTML标头可能导致此问题显现,但问题实际上是在Perl脚本的一侧.
当需要超过7位编码时,JSON 将字符串定义为具有Unicode转义序列的双引号字符集.前127个ISO-8859-1字符可以按原样表示,但任何扩展的ASCII /多字节字符最终都将作为\ uXXXX值.例如,字符é(e-acute),即ISO-8859-1中的#233将显示为\ u00E9(因为é是Unicode中的U + 00E9),字符串"résumé"将存储为"r\u00E9sum\u00E9" .
不知道你的Perl脚本试图做什么,我只能说它在尝试取消引用转义序列时可能会遇到困难.Perl有自己的一组转义序列,\ u mid-string实际上意味着"使下一个字符大写",所以你可能会从你的Perl脚本中看到很多"00E9"而不是重音字符,或者您可能会根据脚本获得解析错误.
由于您是在PHP中使用POST数据创建/存储JSON,因此您有以下选项: