2012-04-26 48 views
0
mysql> CREATE database testing CHARACTER SET utf16; 
Query OK, 1 row affected (0.00 sec) 

mysql> USE testing; 
Database changed 

mysql> CREATE TABLE t (str varchar(64)); 
Query OK, 0 rows affected (0.43 sec) 

mysql> INSET INTO t values ("1234567891234567"); 
Query OK, 1 row affected (0.00 sec) 

=============================Java字符串VS MySQL的串

然後,我有一塊java代碼

Connection connection = DriverManager.getConnection(url, usr, pass); 
Statement statement = connection.createStatement(); 

statement.execute("USE testing"); 

ResultSet rst = statement.executeQuery("SELECT str, LENGTH(str) FROM t;"); 
while (rst.next()) 
      System.out.print("java length: " + rst.getString(1).length() 
        + "\nmysql length: " + rst.getInt(2)); 

這將使

java length: 16 
mysql length: 32 

我不明白爲什麼長度是不同的。我明確地將數據庫的字符集設置爲UTF16(這是Java的默認字符集,對吧?)爲什麼我仍然得到不一致的長度值?

回答

0

Java的默認字符集不是UTF-16,其語言環境爲dependent

如果要更改Java中的Charset,則必須在JVM啓動之前執行該操作,否則將使用與語言環境相關的defaultCharset值。

0

嘗試在UTF-16編碼連接:

Connection connection = DriverManager.getConnection(url+"?characterEncoding=UTF-16", usr, pass); 
0

我的猜測是,Java的IOS報告中的字符數,而MySQL是報告用於存儲字符的字節數。

3

LENGTH(str)的Mysql

返回字符串str的長度,以字節爲單位來測量。多字節 字符計爲多個字節。這意味着,對於含有五兩字節字符,length()返回10,而 CHAR_LENGTH()返回5

你需要什麼也許是CHAR_LENGTH(str)

返回的長度字符串 字符串str,以字符爲單位。一個 多字節字符計爲單個字符。這意味着對於包含5個雙字節字符的字符串 ,LENGTH()返回10, 而CHAR_LENGTH()返回5.