2013-08-13 13 views
6

Ho un valore che vorrei conservare nel mio DB, fa il confronto fa alcuna differenza come una stringa come questaIl modo migliore per memorizzare un valore codificato Base64 nel DB MySQL?

YToyOntzOjIwOiJUeXBlX29mX29yZ2FuaXNhdGlvbiI7czoyMDoiTWVtYmVyIG9mIFBhcmxpYW1lbnQiO3M6ODoiUG9zdGNvZGUiO3M6NzoiUEUxIDFKQSI7fQ== 

Potrebbe essere conservato? Inoltre, l'unico modo in cui mi sembra di essere in grado di scrivere questi valori nel DB è l'utilizzo di un BLOB che sembra essere un modo davvero sbagliato di archiviarlo.

+3

Poiché è * già * base64, perché non solo un CHAR/VARCHAR? BINARY, VARBINARY e BLOB sono modi adatti - a seconda - per memorizzare dati binari (non codificati Base64). Dal momento che sembra essere un valore piccolo, suggerirei BINARY vs. BLOB. – user2246674

+0

geniale, per qualche motivo non ho pensato di usare Binary! :) –

+0

Ah, a volte mi piace decodificare le cose pubblicate su SO. Si noti che con questo tipo di struttura, sarà problematico interrogare correttamente determinati dati da esso. – HamZa

risposta

11

La fascicolazione fa la differenza solo se è necessario ORDER BY o cercare nella colonna. Questi elementi codificati Base64 probabilmente non verranno cercati o ordinati.

Se i vostri articoli codificati sono garantiti per essere meno di 64K byte di lunghezza, definire la colonna in questo modo:

`columnname` TEXT CHARACTER SET ascii, 

Questo è esattamente ciò che è necessario per una variabile base64 codificato; il processo di codifica trasforma tutto in ASCII visualizzabile.

Se gli elementi saranno meno di 16 megabyte di lunghezza, ma alcuni saranno più lunghi di 64k, utilizzare MEDIUMTEXT anziché TEXT.

Modificare anni dopo.

La stringa codificata OQ, decodificato, è un oggetto php serializzato:

a:2:{s:20:"Type_of_organisation";s:20:"Member of Parliament";s:8:"Postcode";s:7:"PE1 1JA";} 

Osservazione 1: sacco di questa roba viene memorizzato in colonne di testo senza codificarlo utilizzando l'utf8 o set di caratteri utf8mb4. Molte? Sì. WordPress memorizza i dati delle opzioni in questo modo.

Osservazione 2: se può essere convertito in JSON, è possibile utilizzare il tipo di dati JSON nelle versioni recenti di MySQL. Le ricerche JSON non sono ancora sargable, ma sono strutturate.

Problemi correlati