INSERT INTO words (word, meaning) VALUES ('Цветок', 'Flower')
当我从 SQL 客户端 (DbVisualizer) 执行此 SQL 语句时,表中的值与您在语句中看到的完全一样,即Цветок
未编码。
当我通过 Tomcat 8 / Java 版本 "1.8.0_101" (Quercus 4.0.39) 从 PHP执行它时,表中的值被完全编码,就像我将在它们上运行 PHP urlencode()一样。所以Flower
没有改变,但是Цветок
- 现在它通过 SQL 客户端在表中查找,如ЦвеÑок
为什么从客户端运行 SQL 语句或从 PHP 运行 SQL 语句有区别?
如何从 PHP 中插入这些数据,以便将其原封不动地保存在数据库中?
更新
这是我的 Tomcat context.xml HSQLDB 资源:
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="me" password="kjsfhsjhfsd" driverClassName="org.hsqldb.jdbc.JDBCDriver"
url="jdbc:hsqldb:hsql://localhost:9001/mydb?characterEncoding=UTF-8"/>
这characterEncoding=UTF-8
实际上是 MySql 特定的(所以让它破坏了这个资源!)。什么是 HSQLDB 等价物?我找不到...
我还尝试按照此处的说明设置php.ini
with unicode.semantics=on
:
http://www.caucho.com/resin-3.1/doc/quercus.xtp#php.ini
http://www.caucho.com/resin-3.1/doc/quercus.xtp#Internationalization-16-bitunicode
http://www.caucho.com/resin-3.1/doc/quercus.xtp#encoding
然而,它并没有做出任何改变……