У меня проблемы с просмотром смайликов в JetBrains DataGrip.В главном редакторе эмоджи выглядят просто отлично, как и в средстве просмотра базы данных SQLiteВ MySQL, однако, они выглядят как ?
. Мне пришлось тщательно выяснить, как заставить смайлики правильно хранить в MySQL.Я следовал многим руководствам, в которых говорилось, что ваш сервер, клиент, соединение, база данных, результаты, таблица и столбцы должны быть установлены в utf8mb4
, а соответствующие параметры сортировки - utf8mb4_unicode_520_ci
.Я сделал это и все еще имею те же результаты, то есть MySQL отображает смайлики как ?
Я дважды проверил переменные и получил эти результаты:
character_set_client utf8mb4
character_set_results utf8mb4
character_set_connection utf8mb4
character_set_server utf8mb4
character_set_database utf8mb4
collation_server utf8mb4_unicode_520_ci
collation_connection utf8mb4_unicode_520_ci
collation_database utf8mb4_unicode_520_ci
Затем я наткнулся наОтвет в сообществе JetBrains, в котором говорится, что вам, возможно, придется использовать кодировку следующим образом:
UPDATE content SET data = (_utf8mb4 '??')
WHERE message_id = 45291;
Но, тем не менее, ошибка не исчезла.Затем я нашел этот маленький драгоценный камень, чтобы показать фактическое значение шестнадцатеричного кода столбца:
SELECT col, HEX(col), LENGTH(col), CHAR_LENGTH(col)
FROM table WHERE id = 1;
Результат был следующим:
col HEX(col) LENGTH() CHAR_LENGTH(col)
?? F09F9899F09F9898 8 2
Ну, конечно же, столбец данных показываетсмайликиОбратите внимание, что эти результаты отображаются в консоли DataGrip.И, конечно же, шестнадцатеричное значение соответствует этим смайликам.Я проверил это с конвертером .
Это здорово!Сложная часть сделана.MySQL хранит мои данные правильно.Но когда я перехожу к фактической таблице в DataGrip, я все еще вижу значение как ??
.
Что я делаю не так?
РЕДАКТИРОВАТЬ Вот средапеременные, используемые при подключении к моему серверу:
{
"allowLoadLocalInfile": true,
"allowMultiQueries": false,
"allowNanAndInf": false,
"allowUrlInLocalInfile": false,
"alwaysSendSetIsolation": true,
"autoClosePStmtStreams": false,
"replicationConnectionGroup": "",
"allowMasterDownConnections": false,
"allowSlaveDownConnections": false,
"readFromMasterWhenNoSlaves": false,
"autoDeserialize": false,
"autoGenerateTestcaseScript": false,
"autoReconnect": true,
"autoReconnectForPools": false,
"blobSendChunkSize": 1048576,
"autoSlowLog": true,
"blobsAreStrings": false,
"functionsNeverReturnBlobs": false,
"cacheCallableStmts": false,
"cachePrepStmts": false,
"cacheResultsSetMetadata": false,
"serverConfigCacheFactory": "com.mysql.jdbc.PerVmServerConfigCacheFactory",
"cacheServerConfiguration": false,
"callableStmtCacheSize": 100,
"capitalizeTypeNames": true,
"characterEncoding": "UTF-8",
"characterSetResults": "UTF-8",
"connectionAttributes": "",
"clientInfoProvider": "com.mysql.jdbc.JDBC4CommentClientInfoProvider",
"clobberStreamingResults": false,
"clobCharacterEncoding": "",
"compensateOnDuplicateKeyUpdateCounts": false,
"connectionCollation": "",
"connectionLifecycleInterceptors": "",
"connectTimeout": 0,
"continueBatchOnError": true,
"createDatabaseIfNotExist": false,
"defaultFetchSize": 0,
"useServerPrepStmts": false,
"dontTrackOpenResources": false,
"dumpQueriesOnException": false,
"dynamicCalendars": false,
"elideSetAutoCommits": false,
"emptyStringsConvertToZero": true,
"emulateLocators": false,
"emulateUnsupportedPstmts": true,
"enablePacketDebug": false,
"enableQueryTimeouts": true,
"explainSlowQueries": false,
"exceptionInterceptors": "",
"failOverReadOnly": true,
"gatherPerfMetrics": false,
"generateSimpleParameterMetadata": false,
"holdResultsOpenOverStatementClose": false,
"includeInnodbStatusInDeadlockExceptions": false,
"includeThreadDumpInDeadlockExceptions": false,
"includeThreadNamesAsStatementComment": false,
"ignoreNonTxTables": false,
"initialTimeout": 2,
"interactiveClient": false,
"jdbcCompliantTruncation": true,
"largeRowSizeThreshold": 2048,
"loadBalanceStrategy": "random",
"serverAffinityOrder": "",
"loadBalanceBlacklistTimeout": 0,
"loadBalancePingTimeout": 0,
"loadBalanceValidateConnectionOnSwapServer": false,
"loadBalanceConnectionGroup": "",
"loadBalanceExceptionChecker": "com.mysql.jdbc.StandardLoadBalanceExceptionChecker",
"loadBalanceSQLStateFailover": "",
"loadBalanceSQLExceptionSubclassFailover": "",
"loadBalanceEnableJMX": false,
"loadBalanceHostRemovalGracePeriod": 15000,
"loadBalanceAutoCommitStatementRegex": "",
"loadBalanceAutoCommitStatementThreshold": 0,
"localSocketAddress": "",
"locatorFetchBufferSize": 1048576,
"logger": "com.mysql.jdbc.log.StandardLogger",
"logSlowQueries": false,
"logXaCommands": false,
"maintainTimeStats": true,
"maxQuerySizeToLog": 2048,
"maxReconnects": 3,
"retriesAllDown": 120,
"maxRows": -1,
"metadataCacheSize": 50,
"netTimeoutForStreamingResults": 600,
"noAccessToProcedureBodies": false,
"noDatetimeStringSync": false,
"noTimezoneConversionForTimeType": false,
"noTimezoneConversionForDateType": true,
"cacheDefaultTimezone": true,
"nullCatalogMeansCurrent": true,
"nullNamePatternMatchesAll": true,
"packetDebugBufferSize": 20,
"padCharsWithSpace": false,
"paranoid": false,
"pedantic": false,
"pinGlobalTxToPhysicalConnection": false,
"populateInsertRowWithDefaultValues": false,
"prepStmtCacheSize": 25,
"prepStmtCacheSqlLimit": 256,
"parseInfoCacheFactory": "com.mysql.jdbc.PerConnectionLRUFactory",
"processEscapeCodesForPrepStmts": true,
"profilerEventHandler": "com.mysql.jdbc.profiler.LoggingProfilerEventHandler",
"profileSql": "",
"profileSQL": false,
"propertiesTransform": "",
"queriesBeforeRetryMaster": 50,
"queryTimeoutKillsConnection": false,
"reconnectAtTxEnd": false,
"relaxAutoCommit": false,
"reportMetricsIntervalMillis": 30000,
"requireSSL": false,
"resourceId": "",
"resultSetSizeThreshold": 100,
"retainStatementAfterResultSetClose": false,
"rewriteBatchedStatements": false,
"rollbackOnPooledClose": true,
"roundRobinLoadBalance": false,
"runningCTS13": false,
"secondsBeforeRetryMaster": 30,
"selfDestructOnPingSecondsLifetime": 0,
"selfDestructOnPingMaxOperations": 0,
"replicationEnableJMX": false,
"serverTimezone": "",
"sessionVariables": ,
"slowQueryThresholdMillis": 2000,
"slowQueryThresholdNanos": 0,
"socketFactory": "com.mysql.jdbc.StandardSocketFactory",
"socksProxyHost": "",
"socksProxyPort": 1080,
"socketTimeout": 0,
"statementInterceptors": "",
"strictFloatingPoint": false,
"strictUpdates": true,
"overrideSupportsIntegrityEnhancementFacility": false,
"tcpNoDelay": true,
"tcpKeepAlive": true,
"tcpRcvBuf": 0,
"tcpSndBuf": 0,
"tcpTrafficClass": 0,
"tinyInt1isBit": false,
"traceProtocol": false,
"treatUtilDateAsTimestamp": true,
"transformedBitIsBoolean": false,
"useBlobToStoreUTF8OutsideBMP": false,
"utf8OutsideBmpExcludedColumnNamePattern": "",
"utf8OutsideBmpIncludedColumnNamePattern": "",
"useCompression": false,
"useColumnNamesInFindColumn": false,
"useConfigs": "",
"useCursorFetch": false,
"useDynamicCharsetInfo": true,
"useDirectRowUnpack": true,
"useFastIntParsing": true,
"useFastDateParsing": true,
"useHostsInPrivileges": true,
"useInformationSchema": false,
"useJDBCompliantTimezoneShift": false,
"useLocalSessionState": false,
"useLocalTransactionState": false,
"useLegacyDatetimeCode": true,
"sendFractionalSeconds": true,
"useNanosForElapsedTime": false,
"useOldAliasMetadataBehavior": false,
"useOldUTF8Behavior": false,
"useOnlyServerErrorMessages": true,
"useReadAheadInput": true,
"useSqlStateCodes": true,
"useSSL": false,
"useSSPSCompatibleTimezoneShift": false,
"useStreamLengthsInPrepStmts": true,
"useTimezone": false,
"ultraDevHack": false,
"useUnbufferedInput": true,
"useUnicode": true,
"useUsageAdvisor": false,
"yearIsDateType": false,
"zeroDateTimeBehavior": "convertToNull",
"useJvmCharsetConverters": false,
"useGmtMillisForDatetimes": false,
"dumpMetadataOnColumnNotFound": false,
"clientCertificateKeyStoreUrl": "",
"trustCertificateKeyStoreUrl": "",
"clientCertificateKeyStoreType": "JKS",
"clientCertificateKeyStorePassword": "",
"trustCertificateKeyStoreType": "JKS",
"trustCertificateKeyStorePassword": "",
"verifyServerCertificate": true,
"useAffectedRows": false,
"passwordCharacterEncoding": "",
"maxAllowedPacket": -1,
"authenticationPlugins": "",
"disabledAuthenticationPlugins": "",
"defaultAuthenticationPlugin": "com.mysql.jdbc.authentication.MysqlNativePasswordPlugin",
"disconnectOnExpiredPasswords": true,
"getProceduresReturnsFunctions": true,
"detectCustomCollations": false,
"serverRSAPublicKeyFile": "",
"allowPublicKeyRetrieval": false,
"dontCheckOnDuplicateKeyUpdateInSQL": false,
"readOnlyPropagatesToServer": true,
"enabledSSLCipherSuites": "",
"enabledTLSProtocols": "",
"enableEscapeProcessing": true
}
РЕДАКТИРОВАТЬ Вот несколько снимков экрана, которые помогут вам понять, что я вижу:
Когда я перехожу к записи черезпредставление таблицы базы данных (?
вместо смайликов):
Когда я выполняю запрос, чтобы выбрать ту же запись и просмотреть ее в консоли (смайлики отображаются как смайлики):