Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe eine Newstabelle erstellt, zu einer News soll auch ein Bild gespeichert werden können.
Dazu habe ich folgende Formular Komponente genutzt:
<FS_REFERENCE name="cs_media" allowEmpty="yes" imagePreview="yes" upload="yes" useLanguages="no">
<FILTER>
<ALLOW type="picture"/>
<HIDE type="folders"/>
</FILTER>
<LANGINFOS>
<LANGINFO lang="*" label="News Visual" description="Please select a media file"/>
</LANGINFOS>
<PROJECTS>
<LOCAL name=".">
<SOURCES>
<FOLDER name="pic" store="mediastore"/>
</SOURCES>
</LOCAL>
</PROJECTS>
</FS_REFERENCE>
Wenn ich in der Datenquelle einen neuen Datensatz anlegen möchte, dann bekomme ich immer eine Fehlermeldung. Egal, ob ich ein Bild ausgewählt habe oder das Feld frei lasse.
Caused by: java.sql.SQLException: Incorrect string value: '\xA7" set...' for column 'image' at row 1
Detailierte Fehlermeldung:
Client Version: 4.2.454.47473
Java Version: 1.7.0 Oracle Corporation
FSVersion=4.2.454.47473#2659;JDK=1.7.0 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=08.02.2012 09:39:00
de.espirit.or.ORException: Error code: 1366, state: HY000
at de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:147)
at de.espirit.or.impl.CreateRelationCommand.accept(CreateRelationCommand.java:94)
at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:642)
at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:74)
at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.commit(ContentManagerImpl.java:1207)
at de.espirit.firstspirit.content.ContentManagerImpl.commit(ContentManagerImpl.java:630)
at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:67)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)
Caused by: java.sql.SQLException: Incorrect string value: '\xA7" set...' for column 'image' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
at com.mysql.jdbc.UpdatableResultSet.updateRow(UpdatableResultSet.java:2411)
at de.espirit.or.impl.TemporalCommandHandler.updateForeignKey(TemporalCommandHandler.java:430)
at de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:137)
at de.espirit.or.impl.CreateRelationCommand.accept(CreateRelationCommand.java:94)
at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:642)
at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:74)
at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.commit(ContentManagerImpl.java:1207)
at de.espirit.firstspirit.content.ContentManagerImpl.commit(ContentManagerImpl.java:630)
at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:67)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)
at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)
at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)
at de.espirit.firstspirit.server.$Proxy33.commit(Unknown Source)
at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.commit(SessionHandlerImpl.java:113)
at de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:191)
at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:521)
at de.espirit.firstspirit.store.access.contentstore.DatasetImpl.save(DatasetImpl.java:938)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.AbstractGuiXmlPanel.save(AbstractGuiXmlPanel.java:460)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:394)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.persist(ContentGuiXmlPanel.java:364)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel.save(ContentGuiXmlPanel.java:359)
at de.espirit.firstspirit.client.gui.tree.store.contentstore.ContentGuiXmlPanel$GuiXmlToolbar$2.actionPerformed(ContentGuiXmlPanel.java:553)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at de.espirit.firstspirit.common.gui.FsButton.fireActionPerformed(FsButton.java:86)
at de.espirit.firstspirit.common.gui.StoreHoverButton.fireActionPerformed(StoreHoverButton.java:97)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:130)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:115)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:108)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
Hallo Herr Wehe,
das sieht sehr stark nach einem Konfigurationsproblem der Mysql bzgl. Encoding aus.
Steht die Collation von Table und Columns auf UTF-8?
Viele Grüße
Jörg Stephan
Zusatzinfo:
Es wird eine MySQL Datenbank eingesetzt.
Auf dem Testserver wird die DerbyDB genutzt, dort tritt derFehler nicht auf.
Auch bei einem anderen Datensatz, bei dem ich eine Bild Referenz speichern möchte, tritt besagter Fehler auf.
Nachtrag 2:
Nun tritt der Fehler auch auf, wenn ich aus der Produktdatenbank einen Datensatz löschen möchte.
Gibt es da bekannte Probleme oder Fallstricke, wenn eine MySQL Datenbank genutzt wird?
Client Version: 4.2.454.47473
Java Version: 1.7.0 Oracle Corporation
FSVersion=4.2.454.47473#2659;JDK=1.7.0 32bit Oracle Corporation;OS=Windows 7 6.1 x86;Date=08.02.2012 14:00:32
de.espirit.or.ORException: Error code: 1366, state: HY000
...
Caused by: java.sql.SQLException: Incorrect string value: '\xA7" set...' for column 'specification' at row 1
Hallo Herr Wehe,
das sieht sehr stark nach einem Konfigurationsproblem der Mysql bzgl. Encoding aus.
Steht die Collation von Table und Columns auf UTF-8?
Viele Grüße
Jörg Stephan
Hallo,
vielen Dank für Ihre Antwort. Wie das Encoding der Tabellen und Spalten konfiguriert ist kann ich derzeit leider noch nicht genau sagen, ich bemühe mich grade um direkten Zugriff auf die Datenbank.
Vielleicht sind auch schon die Verbindungseinstellungen problematisch? Folgendermaßen ist der Zugriff auf die DB konfiguriert (DBNAME, HOST und DBUSER sind natürlich nur Platzhalter):
jdbc.SCHEMA = DBNAME
jdbc.layerclass = de.espirit.or.impl.mysql.MySQLLayer
jdbc.DRIVER = com.mysql.jdbc.Driver
jdbc.URL = jdbc:mysql://HOST:3306/DBUSER?useUnicode=true&characterEncoding=UTF8
Hallo,
haben Sie inzwischen die Konfiguration der Datenbank herausfinden können?
Die Verbindungseinstellungen lassen auf den ersten Blick keine Fehler erkennen.
Viele Grüße
Rouven
Hallo,
es lag daran, dass die Datenbank ISO-8859-1 encodet war. Nach Umstellung auf UTF-8 sind die Fehler verschwunden.
Eine Frage zum Encoding hätte ich aber noch:
Der Kunde möchte Teile der Webseite auch auf japanisch, koreanisch und chinesisch anbieten. Können diese Sprachen vom firstSpirit Admin hinzugefügt werden und muss das Encoding dazu auf UTF-16 geändert werden?
Das ist schön, dass das Problem schonmal gelöst ist.
Die Sprachen können genauso angelegt werden, wie alle anderen Sprachen auch. Hier sollte es also keinerlei Probleme geben. Da UTF-8 und UTF-16 sich nur dahingehend unterscheiden, dass eine unterschiedliche Anzahl Bytes zur Kodierung verwendet wird, die beiden aber ansonsten dieselben Sprachen unterstützen, kann das Encoding auch auf UTF-8 bleiben.
Viele Grüße
Rouven