Esta es la forma en que mi conexión se establece:

Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8", userName, password);

Y me da el siguiente error cuando tyring para agregar una fila a una tabla:

Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' for column 'content' at row 1

Estoy inserción de miles de registros, y siempre me sale este error cuando el texto contiene \xF0 (es decir, la manera incorrecta de la cadena de valor comienza siempre con \xF0).

La intercalación de la columna es utf8_general_ci.

Lo que podría ser el problema?

  • Que sería LATINA PEQUEÑO LETRA N CON TILDE (ñ).
InformationsquelleAutor Lior | 2012-06-08

15 Comentarios

  1. 285

    De MySQL utf8 sólo permite que los caracteres Unicode que puede ser representado con 3 bytes en formato UTF-8. Aquí tienes un personaje que necesita de 4 bytes: \xF0\x90\x8D\x83 (U+10343 GÓTICO CARTA SAUIL).

    Si usted tiene MySQL 5.5 o posterior puede cambiar la columna de codificación de utf8 a utf8mb4. Esta codificación permite el almacenamiento de caracteres que ocupan 4 bytes en formato UTF-8.

    Usted también tendrá que configurar el servidor de la propiedad character_set_server a utf8mb4 en el archivo de configuración de MySQL. Parece que Connector/J predeterminado es de 3 bytes Unicode de otra manera:

    Por ejemplo, el uso de 4-bytes UTF-8 conjuntos de caracteres con Connector/J, configurar el servidor de MySQL con character_set_server=utf8mb4, y dejar characterEncoding de la Connector/J de la cadena de conexión. Connector/J, a continuación, detección automática de la codificación UTF-8 configuración.

    • Lo que una elección extraña para tener utf8 realmente significa «el subconjunto de UTF8 que puede ser representada en 3 bytes».
    • Exactamente! Esto es muy confuso: yo sabía que mi codificación y la intercalación se utf8_general_ci pero todavía estaba recibiendo un error mysql. Me alegro @Joni tenía la respuesta de arriba o de lo contrario, nunca habría adivinado lo que estaba pasando.
    • Advertencia: Usted debe actualizar a la versión más reciente de la Connector/J conductor al hacer esto ya que en versiones anteriores no parecen detección automática de la utf8mb4 ajuste correctamente!
    • character_encoding_server se nota válida MySQL config nombre de la variable. He tratado de establecer character_set_server a utf8mb4 lugar, además de cada una de las columnas, pero no cambió nada.
    • Hay un paso más que tenía que hacer, cuando me cambié a mi base de datos a utf8mb4 y que fue a PARAR especificando characterEncoding=UTF-8&characterSetResults=UTF-8. De hecho, esta fue la prevención de la manipulación adecuada de utf8mb4.
    • # Para cada base de datos: MODIFICAR la BASE de datos database_name CONJUNTO de CARACTERES = utf8mb4 COLLATE = utf8mb4_unicode_ci; # Para cada tabla: ALTER TABLE nombre_tabla CONVERTIR el juego DE CARACTERES utf8mb4 INTERCALAR utf8mb4_unicode_ci; # Para cada columna: ALTER TABLE nombre_tabla CAMBIO column_name column_name VARCHAR(191) CONJUNTO de CARACTERES utf8mb4 INTERCALAR utf8mb4_unicode_ci;
    • Extraño que UTF-8 no es UTF-8 hasta que se actualizó para ser UTF-8
    • Así que usted está sugiriendo que UTF-8 con 3 (tres) bytes es incapaz de almacenar LATINA PEQUEÑO LETRA N CON TILDE (ñ), y tenemos 4 (cuatro) bytes a escribir «España» correctamente? De verdad? No podía ser más inneficient que esto? ¿Qué podemos almacenar además de la A-Z y 0-9 con 3 bytes entonces..
    • ocupa 2 bytes, tanto en utf8 y utf8mb4 siempre que utilice varchar o text. Sólo los caracteres por encima de U+FFFF tomar hasta 4 bytes. Si usted no necesita para almacenar los caracteres de diferentes idiomas siempre se puede usar de 1 byte codificaciones como latin1
    • Por favor, al menos, dejar de llamar utf8mb3 utf
    • Ejecución de SET NAMES utf8mb4; antes de la LOAD DATA LOCAL INFILE declaración fue super útil para mí. stackoverflow.com/a/42024406/470749

  2. 83

    Las cadenas que contienen \xF0 son simplemente caracteres codificados como múltiples bytes el uso de UTF-8.

    Aunque su intercalación se establece en utf8_general_ci, sospecho que la codificación de caracteres de la base de datos, tabla o incluso de la columna pueden ser diferentes. Son independiente de la configuración de. Probar:

    ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)  
        CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

    Sustituir cualquiera que sea su tipo de datos real es de tipo VARCHAR(255)

    • De hecho probado, no funciona. La columna del tipo de datos es LONGTEXT por cierto, si esta materia.
    • Su aplicación es en Java puedo tomar? Trate de llamar a Java con el file-encoding parámetro que especifica la codificación UTF-8, por ejemplo, java -Dfile.encoding=UTF-8 o agregar un modificador apropiado en su Tomcat (etc.) archivo de configuración.
    • Le sugiero que ponga énfasis en la «de la codificación de caracteres de la base de datos, tabla o incluso de la columna puede ser diferente». Que es la cosa más importante.
    • Impresionante hombre! Funcionó bien para mí !!
  3. 51

    Tengo el mismo problema, para guardar los datos con utf8mb4 necesita para asegurarse de que:

    1. character_set_client, character_set_connection, character_set_results son utf8mb4: character_set_client y character_set_connection indicar el juego de caracteres en el que las declaraciones son enviados por el cliente, character_set_results indica el conjunto de caracteres en el que el servidor devuelve los resultados de la consulta para el cliente.

      Ver conjunto de caracteres de la conexión de.

    2. la tabla y la columna de codificación es utf8mb4

    Para JDBC, hay dos soluciones:

    Solución 1 (es necesario reiniciar MySQL):

    1. modificar my.cnf como la siguiente y reiniciar MySQL:

      [mysql]
      default-character-set=utf8mb4
      
      [mysqld]
      character-set-server=utf8mb4
      collation-server=utf8mb4_unicode_ci

    esto puede asegurarse de que la base de datos y character_set_client, character_set_connection, character_set_results son utf8mb4 por defecto.

    1. reiniciar MySQL

    2. cambiar la tabla y la columna de codificación para utf8mb4

    3. DEJAR de especificar characterEncoding=UTF-8 y characterSetResults=UTF-8 en el conector jdbc,porque esto va a reemplazar character_set_client, character_set_connection, character_set_results a utf8

    Solución de los dos (no es necesario reiniciar MySQL):

    1. cambiar la tabla y la columna de codificación para utf8mb4

    2. especificando characterEncoding=UTF-8 en el conector jdbc,causa el conector jdbc no suport utf8mb4.

    3. escribir sql declaración como esta (la necesidad de agregar allowMultiQueries=true a conector jdbc):

      'SET NAMES utf8mb4;INSERT INTO Mytable ...';

    esto se asegurará de que cada una conexión con el servidor, character_set_client,character_set_connection,character_set_results son utf8mb4.

    Ver también conjunto de caracteres de la conexión de.

    • El punto 3 fue el factor decisivo para mí junto con el cambio de la base de datos, tabla & campo de codificaciones: ‘CONJUNTO de NOMBRES de utf8mb4;INSERT INTO Mitabla …’;
    • Punto 3 hizo el truco para mí también, mi tabla de codificación ya establecida utf8mb4.
    • La tabla de codificación es simplemente un defecto. Es suficiente para cambiar la columna de codificación para utf8mb4.
    • El segundo enfoque debe ser utilizado de forma selectiva, yo. e. nunca se aplicará a SELECT consultas, como set names utf8mb4; select ... from ... nunca va a producir un ResultSet y en lugar de resultar en un ResultSet is from UPDATE. No Data. de error.
    • solución 2, par. 1 me ayudó cuando yo estaba tratando de insertar carácteres Cirílicos a través de mi formulario de contacto.
    • La Solución 2 trabajaron para mí, pero soy incapaz de conseguir que acaba de insertar el id de mi segunda consulta de inserción. ¿qué debo hacer ?
    • default-character-set=utf8mb4 para el cliente de mysql fijo para mí. character-set-server es opcional. Forma más rápida de probar: select CONVERT('😃' USING utf8mb4); (editar ~/.mi.cnf o /etc/my.cnf en el cliente de mysql de la máquina). Para probar sólo character_set_results (servidor a parte del cliente): select CONVERT(UNHEX('F09F9883') USING utf8mb4);. «conjunto de caracteres del servidor» sólo establece el valor predeterminado char set aplicado al crear la base de datos de los comandos a ejecutar. Fuente: «indica el conjunto de caracteres y colación de la base de datos predeterminada» dev.mysql.com/doc/refman/8.0/en/charset-connection.html

  4. 11

    Que quería combinar un par de puestos para hacer una completa respuesta a esto ya que parece ser un par de pasos.

    1. Por encima de los consejos de @madtracey

    /etc/mysql/my.cnf o /etc/mysql/mysql.conf.d/mysqld.cnf

    [mysql]
    default-character-set=utf8mb4
    
    [mysqld_safe]
    socket          = /var/run/mysqld/mysqld.sock
    nice            = 0
    
    [mysqld]
    ##
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    De nuevo desde el asesoramiento sobre todas las conexiones jdbc había characterEncoding=UTF-8y characterSetResults=UTF-8 retirado de ellos

    Con este conjunto -Dfile.encoding=UTF-8 parece hacer ninguna diferencia.

    Yo todavía no podía escribir texto internacional en db conseguir el mismo fracaso, como en el anterior

    Ahora el uso de este como-convertir-un-todo-mysql-base de datos-conjunto de caracteres-y-de intercalación a utf-8

    Actualización de toda su base de datos para uso utf8mb4

    ALTER DATABASE YOURDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    Ejecutar esta consulta que le da lo que necesita ser peldaño

    SELECT CONCAT(
    'ALTER TABLE ',  table_name, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  ', 
    'ALTER TABLE ',  table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  ')
    FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
    WHERE C.collation_name = T.table_collation
    AND T.table_schema = 'YOURDB'
    AND
    (C.CHARACTER_SET_NAME != 'utf8mb4'
        OR
     C.COLLATION_NAME not like 'utf8mb4%')

    Copiar pegar de salida en el editor de reemplazar todo | nada el post de nuevo en mysql cuando se conecta a corregir db.

    Que es todo lo que había que hacer, y todo parece funcionar para mí. NoDfile.encoding=UTF-8 no está habilitado y parece funcionar como se espera

    E2A Sigue teniendo un problema ?
    Ciertamente estoy en producción, de manera que resulta que usted necesita para comprobar lo que se ha hecho por encima, ya que a veces no funciona, aquí está la razón y la corrección en este escenario:

    show create table user
    
      `password` varchar(255) CHARACTER SET latin1 NOT NULL,
      `username` varchar(255) CHARACTER SET latin1 NOT NULL,

    Usted puede ver algunos todavía están latina
    de intentar actualizar manualmente el registro:

    ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
    ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

    Así que vamos a reducirlo:

    mysql> ALTER TABLE user change username username varchar(255) CHARACTER SET utf8mb4 not NULL;
    ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
    mysql> ALTER TABLE user change username username varchar(100) CHARACTER SET utf8mb4 not NULL;
    Query OK, 5 rows affected (0.01 sec)

    En corto tuve que reducir el tamaño de ese campo con el fin de obtener la actualización a trabajar.

    Ahora cuando ejecuto:

    mysql> ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4;
    Query OK, 5 rows affected (0.01 sec)
    Records: 5  Duplicates: 0  Warnings: 0

    Funciona todo

    • Pregunta: el último comando ALTER TABLE va a convertir el contenido de todos los campos VARCHAR en válida, auténtica string codificado en UTF8? Lo pregunto porque estoy teniendo problemas para convertir mi LATIN1 campos a UTF8, específicamente cuando la ñ personaje se encuentra, directamente conversión falla debido a un incorrecto de la cadena de valor (error 1366).
    • si te refieres a ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4; curiosamente cuando me encontré con esto el final de tiempo de todos los campos ya no había un conjunto de caracteres definidos. así contraseña desde arriba se convirtió en password varchar(255) not NULL, (nada acerca de la codificación). Esto significa que el último comando simplemente debe haber hecho mysql búsqueda de la verdadera definición de la tabla fue y porque ahora la tabla por defecto los campos ya no la necesita – me imagino que mantuvo con el conjunto de caracteres simplemente porque durante el volcado de toda la tabla de actualizaciones no se pudo actualizar y por lo tanto se dejó en ese estado
  5. 6

    Asumiendo que usted está utilizando phpmyadmin para resolver este error, siga estos pasos:

    1. phpMyAdmin
    2. your_table
    3. La»estructura» de la ficha»
    4. cambiar la Intercalación de su campo de latin1_swedish_ci (o lo que sea) a utf8_general_ci
    • No válida, usted está pensando que utiliza phpMyAdmin.
  6. 5

    En mi caso, he intentado todo lo anterior, nada de lo trabajado. Estoy bastante seguro de que mi base de datos tiene el siguiente aspecto.

    mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper
    
    Connection id:      12
    Current database:   xxx
    Current user:       yo@localhost
    SSL:            Not in use
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:    ;
    Server version:     5.7.17-0ubuntu0.16.04.1 (Ubuntu)
    Protocol version:   10
    Connection:     Localhost via UNIX socket
    Server characterset:    utf8
    Db     characterset:    utf8
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /var/run/mysqld/mysqld.sock
    Uptime:         42 min 49 sec
    
    Threads: 1  Questions: 372  Slow queries: 0  Opens: 166  Flush tables: 1  Open tables: 30  Queries per second avg: 0.144

    así, miro hacia arriba la columna de código de caracteres en cada mesa

    show create table company;

    Resulta que la columna de conjunto de caracteres del latín. Por eso, no puedo insertar Chino en la base de datos.

     ALTER TABLE company CONVERT TO CHARACTER SET utf8;

    Que podrían ser de ayuda. 🙂

  7. 4

    acaba de hacer

    ALTER TABLE `some_table` 
    CHARACTER SET = utf8 , COLLATE = utf8_general_ci ;
    
    ALTER TABLE `some_table` 
    CHANGE COLUMN `description_with_latin_or_something` `description` TEXT CHARACTER SET 'utf8' NOT NULL ;
    • ¿qué pasa si tengo un montón de tablas quiero cambiar en la base de datos, aunque? ¿y si todos tienen diferentes motores de almacenamiento (innodb, etc)?
  8. 3

    Su causada principalmente debido a algunos caracteres unicode. En mi caso fue la Rupia símbolo de moneda.

    Rápidamente solucionar esto, lo tenía a punto el carácter causando este error. He copiado y pegado todo el texto en un editor de texto como vi y se sustituye el inquietante personaje con un texto de uno.

    • El OP mencionó que hay un mil registros que se inserta….
  9. 3

    Tuve el mismo problema en mi proyecto rails:

    Incorrect string value: '\xF0\xA9\xB8\xBDs ...' for column 'subject' at row1

    Solución 1: antes de guardar db convertir la cadena en base64 por Base64.encode64(subject)
    y después de la captura de db uso Base64.decode64(subject)

    Solución 2:

    Paso 1:
    Cambiar el conjunto de caracteres (y de intercalación) para el tema de la columna por

    ALTER TABLE t1 MODIFY
    subject VARCHAR(255)
      CHARACTER SET utf8mb4
      COLLATE utf8mb4_unicode_ci;

    Paso 2: En la base de datos.yml uso

    encoding :utf8mb4
    • No ayudó. Incapaces de almacenar emojis..
  10. 3

    He tenido este problema con mi JUEGO Java de la aplicación. Este es mi traza de la pila para que la excepción:

    javax.persistence.PersistenceException: Error[Incorrect string value: '\xE0\xA6\xAC\xE0\xA6\xBE...' for column 'product_name' at row 1]
      at io.ebean.config.dbplatform.SqlCodeTranslator.translate(SqlCodeTranslator.java:52)
      at io.ebean.config.dbplatform.DatabasePlatform.translate(DatabasePlatform.java:192)
      at io.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:83)
      at io.ebeaninternal.server.persist.dml.DmlBeanPersister.insert(DmlBeanPersister.java:49)
      at io.ebeaninternal.server.core.PersistRequestBean.executeInsert(PersistRequestBean.java:1136)
      at io.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:723)
      at io.ebeaninternal.server.core.PersistRequestBean.executeNoBatch(PersistRequestBean.java:778)
      at io.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:769)
      at io.ebeaninternal.server.persist.DefaultPersister.insert(DefaultPersister.java:456)
      at io.ebeaninternal.server.persist.DefaultPersister.insert(DefaultPersister.java:406)
      at io.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:393)
      at io.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1602)
      at io.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1594)
      at io.ebean.Model.save(Model.java:190)
      at models.Product.create(Product.java:147)
      at controllers.PushData.xlsupload(PushData.java:67)
      at router.Routes$$anonfun$routes$1.$anonfun$applyOrElse$40(Routes.scala:690)
      at play.core.routing.HandlerInvokerFactory$$anon$3.resultCall(HandlerInvoker.scala:134)
      at play.core.routing.HandlerInvokerFactory$$anon$3.resultCall(HandlerInvoker.scala:133)
      at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$8$$anon$2$$anon$1.invocation(HandlerInvoker.scala:108)
      at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:88)
      at play.http.DefaultActionCreator$1.call(DefaultActionCreator.java:31)
      at play.core.j.JavaAction.$anonfun$apply$8(JavaAction.scala:138)
      at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:655)
      at scala.util.Success.$anonfun$map$1(Try.scala:251)
      at scala.util.Success.map(Try.scala:209)
      at scala.concurrent.Future.$anonfun$map$1(Future.scala:289)
      at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
      at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
      at scala.concurrent.impl.CallbackRunnable.run$$$capture(Promise.scala:60)
      at scala.concurrent.impl.CallbackRunnable.run(Promise.scala)
      at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:56)
      at play.api.libs.streams.Execution$trampoline$.execute(Execution.scala:70)
      at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:48)
      at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:68)
      at scala.concurrent.impl.Promise$KeptPromise$Kept.onComplete(Promise.scala:368)
      at scala.concurrent.impl.Promise$KeptPromise$Kept.onComplete$(Promise.scala:367)
      at scala.concurrent.impl.Promise$KeptPromise$Successful.onComplete(Promise.scala:375)
      at scala.concurrent.impl.Promise.transform(Promise.scala:29)
      at scala.concurrent.impl.Promise.transform$(Promise.scala:27)
      at scala.concurrent.impl.Promise$KeptPromise$Successful.transform(Promise.scala:375)
      at scala.concurrent.Future.map(Future.scala:289)
      at scala.concurrent.Future.map$(Future.scala:289)
      at scala.concurrent.impl.Promise$KeptPromise$Successful.map(Promise.scala:375)
      at scala.concurrent.Future$.apply(Future.scala:655)
      at play.core.j.JavaAction.apply(JavaAction.scala:138)
      at play.api.mvc.Action.$anonfun$apply$2(Action.scala:96)
      at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:304)
      at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
      at scala.concurrent.impl.CallbackRunnable.run$$$capture(Promise.scala:60)
      at scala.concurrent.impl.CallbackRunnable.run(Promise.scala)
      at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
      at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
      at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
      at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
      at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
      at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
      at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:43)
      at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
      at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
      at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
      at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
    Caused by: java.sql.SQLException: Incorrect string value: '\xE0\xA6\xAC\xE0\xA6\xBE...' for column 'product_name' at row 1
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
      at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
      at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
      at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
      at io.ebeaninternal.server.type.DataBind.executeUpdate(DataBind.java:82)
      at io.ebeaninternal.server.persist.dml.InsertHandler.execute(InsertHandler.java:122)
      at io.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:73)
      ... 59 more

    Yo estaba tratando de guardar un registro mediante io.Ebean. Me fijo por volver a crear mi base de datos con utf8mb4 de intercalación, y se aplica de jugar evolución para volver a crear todas las tablas, de modo que todas las tablas deben ser recreado con codificación utf-8 de intercalación.

    CREATE DATABASE inventory CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  11. 2

    Yo sólo desea aplicar el cambio sólo de un campo, usted podría tratar de serializar el campo

    class MyModel < ActiveRecord::Base
      serialize :content
    
      attr_accessible :content, :title
    end
  12. 1

    Que usted necesita para establecer utf8mb4 en la meta de html y también en su servidor de alterar la tabla y el conjunto de intercalación para utf8mb4

  13. 1

    esta no es la recomendación de la solución.. Pero vale la pena compartir. Desde mi proyecto de actualización del sistema de base de datos de Mysql antigua a la más reciente (8). Pero yo no puedo cambiar la estructura de la tabla, sólo el DBMS config (mysql). La solución para el servidor mysql.

    prueba en Windows
    mysql 8.0.15
    en mysql config de búsqueda para

    sql-mode=»…..»

    quita el comentario. O en mi caso sólo tienes que escribir/add

    sql-mode=»NO_ENGINE_SUBSTITUTION»

    ¿por qué no se recomienda la solución. porque si usted utiliza latin1 (mi caso).. los datos de inserción successly pero no el contenido (mysql no responder con error!!) . por ejemplo que tipo de información como este

    bla \x12

    ahorrar

    bla [] (cuadro)

    bien.. para mi problema.. puedo cambiar el campo a UTF8.. Pero hay un pequeño problema.. ver respuesta anterior sobre otra solución es no, porque la palabra no está insertada, porque contienen más de 2 bytes (cmiiw).. esta solución hacer su insertar los datos de cuadro. Lo razonable es utilizar blob.. y puede omitir mi respuesta.

    Otra prueba relacionada con este se.. el uso de utf8_encode en su código antes de guardar. Yo uso en latin1 y fue éxito (que no voy a usar sql-mode)! igual que el anterior respuesta usando base64_encode .

    Mi sugerencia para analys su mesa requisito y trató de cambiar de formato a UTF8

Dejar respuesta

Please enter your comment!
Please enter your name here