我在数据库中保存塞尔维亚拉丁字符时遇到问题,但只有当我从 jsf 应用程序保存它时才会出现问题。当我直接使用 SQLyog 在数据库中插入一些行时,一切都很好。当我尝试从应用程序插入某些内容而不是字符时:数据库中的 č
、ć
和 đ
会插入问号。
另一方面,当我从数据库中读取该行时,所有内容都正确显示,没有问号。
最佳答案
When I try insert something from application instead of characters: č, ć and đ in database are inserted question marks.
换句话说,MySQL JDBC 驱动程序不支持最初提交字符时使用的字符编码。当向数据库发送字符数据时,MySQL JDBC 驱动程序默认使用平台默认编码,例如可以是 ISO 8859-1。您需要通过在 JDBC URL 中指定 useUnicode
和 characterEncoding
参数来告诉它不要这样做。
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
当您使用 Facelets 作为 View 技术时,JSF 在呈现 HTML 内容和处理提交的参数值时本身已经默认为 UTF-8。所以问题至少不在那里。
另请参阅:
关于mysql - 在数据库中保存塞尔维亚拉丁字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311462/