2016-05-31 11 views
0

Wie unten zu sehen, funktioniert die Verwendung von 'Cast' mit int & Char funktioniert gut, aber die gleichen Befehle mit Bigint & Varchar jeweils nicht.'Cast' Problem in Mysql mit Bigint und Varchar

Ist das ein bekanntes Problem in MySQL? Ich stieß auf diese bei der Verwendung von jooq - mehr Details unten.

Wenn es dafür in mysql oder jooq Workarounds gibt, wäre das großartig. Danke!

Version

$ mysql --version 
mysql Ver 15.1 Distrib 5.5.39-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1 

SQL Fein

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) 

Diese beiden arbeiten Befehle Diese beiden nicht

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 

Problem verursacht durch SQL-Abfrage generiert durch 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 
+0

Guss unterstützt nicht alle Arten http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html #function_convert Meiner Erfahrung nach wird Casting in "int" Casting zu "bigint" (nach odbc Ergebnissen). – Uueerdo

+0

Wie haben Sie Ihre jOOQ-Abfrage erstellt? Sind Sie sicher, dass Sie das entsprechende 'SQLDialect' verwendet haben? jooq bekommt das richtig für MySQL und MariaDB, wenn alles richtig konfiguriert ist ... –

+0

Vielen Dank für Ihre Antworten. Bitte überprüfen Sie meine Antwort unten. Es sieht nicht richtig aus, dass MySQL bricht - sieht aus wie ein Fehler. –

Antwort

0

Es war Benutzerfehler. Ich benutzte einen jooq-Kontext, der für den SQL-Dialekt der H2-Datenbank konfiguriert wurde. Erstellte einen weiteren jooq-Kontext für die Verwendung mit mysql und das Problem verschwand. Dies ist, was der jOOQ Abschnitt in der dao XML-Datei wie jetzt aussieht:

<bean id="jooqSettings" class="org.jooq.conf.Settings"> 
    <property name="renderNameStyle" value="AS_IS"/> 
</bean> 

<bean id="jooqConfig" class="org.jooq.impl.DefaultConfiguration"> 
    <property name="SQLDialect" value="H2"/> 
    <property name="settings" ref="jooqSettings"/> 
</bean> 

<bean id="jooqContext" class="org.jooq.impl.DefaultDSLContext"> 
    <constructor-arg ref="jooqConfig"/> 
</bean> 

<bean id="jooqConfigMysql" class="org.jooq.impl.DefaultConfiguration"> 
    <property name="SQLDialect" value="MYSQL"/> 
    <property name="settings" ref="jooqSettings"/> 
</bean> 

<bean id="jooqContextMysql" class="org.jooq.impl.DefaultDSLContext"> 
    <constructor-arg ref="jooqConfigMysql"/> 
</bean>