0
次のように、 'キャスト'を& charで使用すると、 のbigintと同じコマンドが実行されますが、それぞれ同じvarcharのコマンドは使用できません。bigintとvarcharを使用したmysqlの 'キャスト'の問題
これはmysqlの既知の問題ですか? jooqを使用しているときに私はこの問題に遭遇しました。
これに対応する方法がある場合は、mysqlまたはjooqでそれが最適です。 ありがとう!
バージョンSQLが コマンド
$ mysql --version
mysql Ver 15.1 Distrib 5.5.39-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
これら二つの作業罰金
MariaDB [puresw]> select cast(100 as int);
+------------------+
| cast(100 as int) |
+------------------+
| 100 |
+------------------+
1 row in set (0.01 sec)
MariaDB [puresw]> select cast('abc' as char(32));
+-------------------------+
| cast('abc' as char(32)) |
+-------------------------+
| abc |
+-------------------------+
1 row in set (0.00 sec)
これら二つは、SQLクエリによって引き起こさ
MariaDB [puresw]> select cast(100 as bigint);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'bigint)' at line 1
MariaDB [puresw]> select cast('abc' as varchar(32));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'varchar(32))' at line 1
問題が
をjooqによって生成されませんCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'bigint), cast(0 as int), cast('ABC' as varchar), cast('Purity' as varchar), cast' at line 1
Query is:
sql : 'insert into software_version (task_id, controller, group_id, name, version, status) values (cast(? as bigint), cast(? as int), cast(? as varchar), cast(? as varchar), cast(? as varchar), cast(? as varchar))', parameters : [100,0,'ABC','Purity','4.5.2','Available']
at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:138) ~[mariadb-java-client-1.1.9.jar:?]
at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106) ~[mariadb-java-client-1.1.9.jar:?]
at org.mariadb.jdbc.MySQLStatement.executeQueryEpilog(MySQLStatement.java:268) ~[mariadb-java-client-1.1.9.jar:?]
at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:296) ~[mariadb-java-client-1.1.9.jar:?]
at org.mariadb.jdbc.MySQLStatement.executeUpdate(MySQLStatement.java:364) ~[mariadb-java-client-1.1.9.jar:?]
at org.mariadb.jdbc.MySQLPreparedStatement.executeUpdate(MySQLPreparedStatement.java:148) ~[mariadb-java-client-1.1.9.jar:?]
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) ~[commons-dbcp-1.4.jar:1.4]
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) ~[commons-dbcp-1.4.jar:1.4]
at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:916) ~[spring-jdbc-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:909) ~[spring-jdbc-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644) ~[spring-jdbc-4.1.7.RELEASE.jar:4.1.7.RELEASE]
... 43 more
キャストは、すべてのタイプをサポートしていませんhttp://dev.mysql.com/doc/refman/5.7/en/cast-functions.html #function_convert 私の経験では、多くの場合、 "int"へのキャストは "bigint"にキャストされています(ODBCの結果による)。 – Uueerdo
あなたのjOOQクエリはどのように構築されましたか?あなたは適切な 'SQLDialect'を使用していますか?すべてが適切に設定されていれば、jOOQはMySQLとMariaDBのためにこの権利を取得します... –
あなたの応答に感謝します。以下の私の回答を確認してください。 mysqlが壊れているようには見えません - バグのようです。 –