【问题标题】:Illegal mix of collations in ejbejb 中的排序规则的非法混合
【发布时间】:2012-05-23 15:17:46
【问题描述】:

在数据库排序规则为 latin1_general_ci 的 MySQL 5.1 上,当我 UPDATE 时出现此异常:

异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:排序规则(latin1_general_ci,IMPLICIT)和(latin1_swedish_ci,IMPLICIT)的非法混合操作'=' 错误代码:1267 调用: UPDATE medicaltestdetails, TL_medicaltestdetails SET medicaltestdetails.Status = TL_medicaltestdetails.Status WHERE medicaltestdetails.TestDate = TL_medicaltestdetails.TestDate AND medicaltestdetails.TestSerial = TL_medicaltestdetails.TestSerial AND medicaltestdetails.ConsultantId = TL_medicaltestdetails.ConsultantId AND medicaltestdetail 查询:UpdateAllQuery(referenceClass=Medicaltestdetails sql="CREATE TEMPORARY TABLE IF NOT EXISTS TL_medicaltestdetails (Chg BIGINT, Remarks VARCHAR(255), Result VARCHAR(255), Status VARCHAR(255), TestDesc VARCHAR(255), TestType VARCHAR(255) , TestDate DATE NOT NULL, TestSerial VARCHAR(255) NOT NULL, ConsultantId VARCHAR(255) NOT NULL, TestTime INTEGER NOT NULL, PRIMARY KEY (TestDate, TestSerial, ConsultantId, TestTime))")

请帮我解决这个问题。

【问题讨论】:

  • 请为medicaltestdetailsTL_medicaltestdetails 发布SHOW CREATE TABLE 的输出。

标签: mysql ejb


【解决方案1】:

您可能在我的 JDBC 连接字符串中添加了“&characterEncoding=UTF-8”。 如果

mysql> show variables like "collation_database";
    +--------------------+-----------------+
    | Variable_name      | Value           |
    +--------------------+-----------------+
    | collation_database | utf8_general_ci |
    +--------------------+-----------------+

不是这样的 和

mysql> show table status;
    +--------------+-----------------+
    | Name         | Collation       |
    +--------------+-----------------+
    | my_view      | NULL            |
    | my_table     | utf8_unicode_ci |
    ...

不是这样的

做:

ALTER DATABASE mydb DEFAULT COLLATE utf8_unicode_ci;

并更改字段的编码:

ALTER TABLE my_table MODIFY COLUMN my_column column_type CHARACTER SET utf8 COLLATE utf8_unicode_ci [NOT NULL];

或者改变表格的编码:

ALTER TABLE my_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci

卢卡

【讨论】:

  • 谢谢。您是我发现的第一个答案,强调表中的列可以有自己的编码(不管表的默认编码)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2011-01-20
  • 2016-12-08
  • 2010-11-17
  • 2010-11-03
  • 2012-12-13
相关资源
最近更新 更多