I was wondering whether or not storing an array as a JSON string in a mysql text field is good practice.
I am creating an invoice which allows the user to add an u
Because others have answered your question more directly, I'm going to take a fringe approach and address future maintainability instead.
Storing a variable number of items that are just begging to be a database entity (SKU, Price, Name, Description) as JSON may be fine now, but it's going to lead to a ton of data duplication.
Instead, do what you said and create a table for all the products. Then create another table for invoices_have_products. You can then pull every row from invoices_have_products where the invoice ID matches, and then pull every row from products where the product ID matches the rows you pulled from invoices_have_products.
It might get a little tedious right now, but when all your data is in neat tables and easily queryable, you'll be much happier. Think about the nightmare of running reports on millions of text fields with JSON. Absolutely horrifying.
To answer a part of your question: No, I don't think this is good practice and it looks a little bit like bad practice, to be honest.