【问题标题】:Why won't my mysql database accept an accent mark?为什么我的 mysql 数据库不接受重音符号?
【发布时间】:2012-10-30 13:09:34
【问题描述】:

我刚刚发现了一个问题,城市名称包含重音符号,例如La Cañada、Peñasco 等不会保存到我的数据库中。查看另一个 SO 问题的答案What is the best collation to use for MySQL with PHP?,我尝试将我的数据库和 varchar 的排序规则类型从 latin1_swedish_ci 更改为 utf8_general_ci,但仍然拒绝该字符。我也尝试了utf8_unicode_ci,结果相似。

如果我去掉客户端的重音符号,我已经验证了保存是否有效,但理想情况下我想将它保留在那里,因为这是城市的真实名称(根据 google maps apis反正)。

您使用哪些排序规则类型来支持 ñ?

附加信息:将 MySQL、phpMyAdmin 和 CakePHP 与 Android 应用程序一起用作客户端


感谢到目前为止的建议。我想这现在变成了一个 CakePHP 问题......我注意到默认情况下utf8 is not enabled,所以我在我的 app/config/database.php 文件中启用了它。我将文件通过 FTP 传回服务器并再次尝试,但仍然没有任何运气。我是否需要重新部署应用程序以启动那些数据库配置更改,或者我的应用程序的其他区域我应该检查吗?第一次使用 CakePHP 用户。

【问题讨论】:

  • 大多数 utf8 排序规则对这个字符应该没有任何问题。你的INSERT-statement 是什么样子的?您的 mysql 数据库连接器是否使用 utf8?
  • latin1 字符集支持ñ。我不认为问题出在字符集中。
  • 我记得 £ 符号有类似的问题,虽然我没有使用 cake,但应用程序中有 cake 的变形器。您是否使用Cake/Utility/Inflector.php 进行过滤?
  • 我看到了 Cake/Utility/Inflector.php 文件,但老实说我不能说我是否在积极使用它。 Cake 默认使用过滤器吗?

标签: android mysql database cakephp collation


【解决方案1】:

Collat​​ion 只是字符排序的顺序,这是执行比较的必要步骤。它与数据的存储方式无关(除非给定的排序规则特定于某些编码)。

字符编码是字符到它们的二进制表示的映射以便存储,它决定了支持的字符集

但是,仅仅因为数据库/表/列使用特定的字符编码并不是故事的结局。您还必须考虑在您的应用程序中以及在其与其他组件(例如 MySQL)的接口上使用的编码。

虽然它针对的是 PHP,但 UTF-8 all the way through 几乎涵盖了您需要考虑的所有内容。

【讨论】:

  • 您一定是对的,它必须与我的Web应用程序中的字符编码有关。我用 cakephp 尝试了几件事,并用更多细节更新了我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2017-06-26
  • 2013-07-24
相关资源
最近更新 更多