【问题标题】:Clojure MySQL Syntax Error Exception ("[...] near '????????????????' [...]")Clojure MySQL 语法错误异常(“[...] 靠近 '????????????????' [...]”)
【发布时间】:2011-01-11 02:15:09
【问题描述】:

除了建立连接之外,我在使用 clojure.contrib.sql 做任何事情时都遇到了麻烦。

我有一个在 localhost:3306 上运行的 mysqld,其数据库名为 clj_db。 用户 'clj_user'@'localhost' 和密码 'clj_pass' 可以访问这个数据库。

当尝试“从 clj_table 中选择 *”时,我收到“com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以获取正确的语法在'????????????????'附近使用在第 1 行"。

我做错了什么?

clj_db.clj_table

CREATE TABLE `clj_table` (
  `col_one` int(11) NOT NULL,
  `col_two` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

mysql_test.clj

(ns test.mysql
    (:use clojure.contrib.sql)
)

(def db-settings
    {:classname "com.mysql.jdbc.Driver"
    :subprotocol "mysql"
    :subname "//localhost:3306/clj_db"
    :user "clj_user"
    :password "clj_pass"})

(with-connection db-settings
    (with-query-results rs ["select * from clj_table"]
        (dorun (map #(println (:col_one :col_two %)) rs))
    ))

输出

Exception in thread "main" com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1 (mysql_test.clj:0)
   at clojure.lang.Compiler.eval(Compiler.java:4658)
   at clojure.lang.Compiler.load(Compiler.java:4972)
   at clojure.lang.Compiler.loadFile(Compiler.java:4939)
   at clojure.main$load_script__7405.invoke(main.clj:213)
   at clojure.main$script_opt__7442.invoke(main.clj:265)
   at clojure.main$main__7466.doInvoke(main.clj:346)
   at clojure.lang.RestFn.invoke(RestFn.java:441)
   at clojure.lang.Var.invoke(Var.java:367)
   at clojure.lang.AFn.applyToHelper(AFn.java:179)
   at clojure.lang.Var.applyTo(Var.java:476)
   at clojure.main.main(main.java:37)
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????????????????' at line 1
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1048)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687)
   at com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1859)
   at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3593)
   at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2199)
   at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:784)
   at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:350)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
   at java.sql.DriverManager.getConnection(libgcj.so.10)
   at clojure.contrib.sql.internal$get_connection__218.invoke(internal.clj:85)
   at clojure.contrib.sql.internal$with_connection_STAR___226.invoke(internal.clj:102)
   at test.mysql$eval__386.invoke(mysql_test.clj:12)
   at clojure.lang.Compiler.eval(Compiler.java:4642)
   ...10 more

【问题讨论】:

  • 附加信息:clojure-1.1.0 --- clojure-contrib-1.1.0 --- mysql-connector-java-5.1.11-bin --- java 1.5.0 --- mysql Ver 14.14 Distrib 5.1.41,用于 debian-linux-gnu (x86_64) 使用 readline 6.1

标签: mysql exception jdbc clojure


【解决方案1】:

我已经切换到 Sun 的 JDK6 而不是 GIJ。

我收到“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接故障”。 我找到了this thread,对我帮助很大。

我添加了选项“-Djava.net.preferIPv4Stack=true”,现在可以正常使用了。

谢谢大家!

【讨论】:

    【解决方案2】:

    我在使用 Java 时遇到了完全相同的问题。我找到了this 帖子,那里描述的解决方案对我有用。

    诀窍是将“useJvmCharsetConverters=true”添加到连接字符串的末尾。

    【讨论】:

      【解决方案3】:

      代码看起来与This Question 中的(可能是工作的)代码非常相似
      可能是 clojure-contrib 版本的问题。

      当我对这两个问题的代码进行宏展开时,它们的结果是相同的,因此问题似乎不在于 mysql_test.clj 的内容。

      【讨论】:

      • 是的,我也看过。只是为了确保我再次下载了 clojure 和 clojure-contrib 版本,但我得到了相同的输出。
      猜你喜欢
      • 2022-12-19
      • 2021-05-02
      • 2016-06-18
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多