Ukládání emoticonů do databáze

Ondris
Člen | 37
+
0
-

Ahoj,

narazil jsem na chybu s ukládáním tohoto emoticonu 😊. Prošel jsem jak to řešili ostatní a nyní jsem ve stavu, kdy mám nastavenou databázi, tabulku i sloupec na utf8mb4_general_ci (utf8mb4_czech_ci se chová stejně) a uložení přes phpmyadmin funguje, takže předpokládám, že problém bude s nastavením znakové sady.

Zkouším tohle (nastavení sady jen v dsn, nebo jen v options se chová stejně):

default:
                dsn: "mysql:host=localhost;port=3306;dbname=junodb;charset=utf8mb4_czech_ci"
                user: root
                password:
                options:
                    charset: "utf8mb4_czech_ci"

Než jsem upravil nastavení v databázi tak byla chyba:
SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‚\xF0\x9F\x98\x8A‘ for column ‚name‘ at row 1

Po úpravě nastavení databáze se mi z webu uloží otazníky místo emoticonu a v phpadmin vše funguje.

Při úpravě configu:
SQLSTATE[HY000] [2019] Unknown character set

Marek Znojil
Člen | 75
+
0
-

Ahoj,

charset v dsn změň na utf8mb4.

Editoval Marek Znojil (7. 9. 2020 10:46)

Ondris
Člen | 37
+
0
-

Bohužel nepomohlo, jediný na co jsem přišel, že uložení přes nette database vytvoří jeden otazník a přes doctrine 4 otazníky.

David Grudl
Nette Core | 8082
+
0
-

Charset musí být utf8, což je default, tak to z DSN smaž.

tom
Člen | 171
+
0
-

Snazim se o podobne ukladani emotikonu. Konfiguraci databaze mam …

parameters:
	database:
		driver: mysqli
		host: ***
		user: ***
		password: ***
		database: ***
		charset: utf8mb4
		profiler: true
		options:
			lazy: yes

Porovnavani na databazi, tabulce a danem sloupci jsem nastavil na utf8mb4_czech_ci

Ale pri insertu stale dostavam chybu
Incorrect string value: '\xF0\x9F\x90\xA8' for column

A kdyz ten emotikon vlozim do databaze pres Adminer, tak je to ok, ale do webu se pak naste otaznik

Poradite prosim kde hledat chybu? Diky

Editoval tom (24. 9. 2023 20:44)

tom
Člen | 171
+
0
-

Tak v MySqliDriver je v konstruktoru ‚charset‘ ⇒ ‚utf8‘, pokud to tady zmenim, tak vse funguje. jak to ale zmenit pomoci konfigurace?

nightfish
Člen | 468
+
0
-

tom napsal(a):

parameters:
database:
	driver: mysqli
	host: ***
	user: ***
	password: ***
	database: ***
	charset: utf8mb4
	profiler: true
	options:
		lazy: yes

@tom charset má být vnořen pod options, nikoliv pod database

Viz dokumentaci.

tom
Člen | 171
+
0
-

nightfish napsal(a):

tom napsal(a):

parameters:
database:
	driver: mysqli
	host: ***
	user: ***
	password: ***
	database: ***
	charset: utf8mb4
	profiler: true
	options:
		lazy: yes

@tom charset má být vnořen pod options, nikoliv pod database

Viz dokumentaci.

@nightfish jojo ale i tak to dopadne stejne

tom
Člen | 171
+
0
-

tom napsal(a):

nightfish napsal(a):

tom napsal(a):

parameters:
database:
	driver: mysqli
	host: ***
	user: ***
	password: ***
	database: ***
	charset: utf8mb4
	profiler: true
	options:
		lazy: yes

@tom charset má být vnořen pod options, nikoliv pod database

Viz dokumentaci.

@nightfish jojo ale i tak to dopadne stejne

Ta dokumentace je pro Nette Database nevim jestli pro Dibi je to jine …

tom
Člen | 171
+
0
-

tak uz jsem na to prisel, chybelo mi to v sekci pro dibi

dibi:
	host: ***
	username: ***
	password: ***
	database: ***
	lazy: TRUE
	charset: utf8mb4